C++函数模板 class 和 typename 的区别

您所在的位置:网站首页 template class和typename C++函数模板 class 和 typename 的区别

C++函数模板 class 和 typename 的区别

2022-06-06 00:16| 来源: 网络整理| 查看: 265

先看如下代码

template void mySwap(T &a, T &b) { T tmp = a; a = b; b = tmp; } int a = 10; int b = 20; mySwap(a, b);

以上代码可以直接编译通过,那么此时将class 改为typename,如下

template void mySwap(T &a, T &b) { T tmp = a; a = b; b = tmp; } int a = 10; int b = 20; mySwap(a, b);

以上代码在编译的时候,就编译不通过了,原因是typename定义的模板必须明确指定类型,如下

int a = 10; int b = 20; //2 显示指定类型 mySwap(a, b);

在mySwap加上就可以编译通过了,表示让编译器在编译时,将T转化为中的类型.

通过对比,我们很容易就能发现class 和 typename的区别了.

class 修饰的模板在编译时,不需要mySwap()指定类型,编译会根据传入的参数,自动将T,替换为该类型

typename 修饰的模板在编译时,需要明确指定mySwap()的参数类型,如果不指定,编译器就会报错。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3